package xml;

import java.rmi.RemoteException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import remoto.Proxy;
import dominioTO.ItemListaPreciosTO;
import dominioTO.ListaPreciosTO;
import dominioTO.ProveedorTO;
import dominioTO.RodamientoTO;

public class CPR_ListaPreciosXml {
	private static final String ARCHIVO = "http://localhost:8080/ServidorNegocio/xml/ListaPreciosProveedor.xml";
	private static CPR_ListaPreciosXml instancia;
	private Document doc;
	
	public static CPR_ListaPreciosXml getInstancia(){
		if(instancia == null){
			instancia = new CPR_ListaPreciosXml();
			instancia.crearDocumento();
		}
		return instancia;
	}
	
	private void crearDocumento(){
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder;
		try {
			builder = factory.newDocumentBuilder();
			doc = builder.parse(ARCHIVO);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	
	
	public ListaPreciosTO leerElementos() throws RemoteException, DOMException{

		Element root = doc.getDocumentElement();
		
		ProveedorTO provTO = Proxy.getInstancia().buscarProveedor(root.getAttribute("CuilProveedor"));
		
		if(provTO!=null)
		{
			ListaPreciosTO listaTO = new ListaPreciosTO();	
			listaTO.setCodigoLista(root.getAttribute("codigoLista"));
			listaTO.setTipo(root.getAttribute("Tipo"));
			listaTO.setProveedor(provTO);
			listaTO.setDiasVigencia(Integer.valueOf(root.getAttribute("Vigencia")));
			listaTO.setFechaDesde(Date.valueOf(root.getAttribute("FechaDesde")));
		
			NodeList itemList = root.getElementsByTagName("Item");
			List<ItemListaPreciosTO> itemListaTO = new ArrayList<ItemListaPreciosTO>();
			for(int i=0; i<itemList.getLength(); i++)
			{
				Element itemLista = (Element)itemList.item(i);
				
				RodamientoTO rodamientoTO = Proxy.getInstancia().buscarRodamiento(itemLista.getAttribute("serie"), 
														itemLista.getElementsByTagName("Sufijo").item(0).getTextContent(), 
														itemLista.getElementsByTagName("Marca").item(0).getTextContent(), 
														itemLista.getElementsByTagName("Origen").item(0).getTextContent());
				
				if(rodamientoTO!=null)
				{
					ItemListaPreciosTO itemTO = new ItemListaPreciosTO();
					itemTO.setRodamiento(rodamientoTO);
					itemTO.setPrecioCompra(Float.valueOf(itemLista.getElementsByTagName("Precio").item(0).getTextContent()));					
					itemListaTO.add(itemTO);
				}
				listaTO.setItemsListaPecio(itemListaTO);
			}
		return listaTO;
		}
		System.out.println("No existe el proveedor");
		return null;
		
	}
	

}
